package com.sscl.easyble.variable

import android.os.Build
import androidx.annotation.RequiresApi
import com.sscl.easyble.enums.blescan.BleCallbackType
import com.sscl.easyble.enums.blescan.BleMatchMode
import com.sscl.easyble.enums.blescan.BleNumOfMatches
import com.sscl.easyble.enums.blescan.BleScanMode
import com.sscl.easyble.enums.blescan.BleScanPhy
import java.util.concurrent.TimeUnit

/**
 * 搜索相关的全局变量
 */
object GlobalScanVariable {


    /**
     * 扫描模式-默认为低延时模式
     */
    internal val bleScanMode = BleScanMode.SCAN_MODE_LOW_LATENCY

    /**
     * 扫描结果反馈延时时间，单位：ms
     */
    internal const val reportDelay = 0L

    /**
     * BLE匹配模式-默认为进击模式
     */
    @RequiresApi(Build.VERSION_CODES.M)
    internal val bleMatchMode = BleMatchMode.MATCH_MODE_AGGRESSIVE

    /**
     * BLE回调模式-默认为全部匹配
     */
    @RequiresApi(api = Build.VERSION_CODES.M)
    internal val bleCallbackType = BleCallbackType.CALLBACK_TYPE_ALL_MATCHES

    /**
     * 匹配数量限制-默认为大量匹配
     */
    @RequiresApi(api = Build.VERSION_CODES.M)
    internal val bleNumOfMatches = BleNumOfMatches.MATCH_NUM_MAX_ADVERTISEMENT

    /**
     * 扫描结果中是否只返回旧广告。对于
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    internal val legacy = false

    /**
     * 扫描物理层-仅当legacy为false时有效
     * 如果设置
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    internal val bleScanPhy = BleScanPhy.PHY_LE_ALL_SUPPORTED

    /**
     * 单次扫描的最大时长，为负数表示一直扫描，直到手动停止扫描
     */
    internal var scanTimeout: Long = 20

    /**
     * 单次扫描的最大时长的时间单位
     */
    internal val scanTimeoutUnit = TimeUnit.SECONDS
}